package models

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"github.com/rs/xid"
	"sofuny/config"
	"sofuny/utils"
	"time"
)

var app = config.App()

// 基类
type Base struct {
	ID       int       `json:"id" gorm:"primary_key;auto_increment;not null"` // id
	CreateAt time.Time `json:"createAt" gorm:"not null"`                      // 创建时间
	UpdateAt time.Time `json:"updateAt" gorm:"not null"`                      // 更新时间
	Status   bool      `json:"status" gorm:"default false"`                   // 状态
	Uuid     string    `json:"uuid" gorm:"type:varchar(40);unique;not null"`  // uuid
}

// 链接数据库
func ConnectionDB() *gorm.DB {
	str := fmt.Sprintf("%s:%s@/%s?charset=utf8mb4&parseTime=True&loc=Local",
		app.Database.User, app.Database.Password, app.Database.Name)

	db, err := gorm.Open(app.Database.Driver, str)

	if err != nil {
		return db
	} else {
		db.DB().SetMaxIdleConns(1000)
		db.DB().SetMaxOpenConns(1000)
		// 启用Logger，显示详细日志
		db.LogMode(false)
		// SetConnMaxLifetime设置连接可以重用的最长时间。
		db.DB().SetConnMaxLifetime(time.Hour)
		return db
	}
}

//
func MigrateDB() {
	db := ConnectionDB()
	if err := db.AutoMigrate(
		&Sentence{},        // 句子
		&Subscribe{},       // 订阅
		&User{},            // 用户
		&Article{},         // 文章
		&Link{},            // 友人帐
		&FeedBack{},        // 反馈
		&TransferFile{},    // 快传文件
		&Letter{},          // 一封信
	).Error; err != nil {
		fmt.Println("迁移失败 | ", err.Error())
	} else {
		var user User
		user.CreateAt = time.Now().Local()
		user.UpdateAt = user.CreateAt
		user.Uuid = xid.New().String()
		user.Status = true
		user.IsSuperUser = true
		user.Username = app.Username
		user.Password = utils.MD5(app.Password)
		user.Email = app.Email
		user.Avatar = app.StaticApi + "/static/image/logo.png"
		if err := db.Create(&user).Error; err != nil {
			fmt.Println("创建用户失败>> " + err.Error())
		} else {
			fmt.Println("创建用户成功")
		}
	}
}
